home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / lesspipe.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-12-09  |  5KB  |  216 lines

  1. #!/bin/bash
  2. #
  3. # Preprocessor for 'less'. Used when this environment variable is set:
  4. # LESSOPEN="|lesspipe.sh %s"
  5.  
  6. # TODO: handle compressed files better
  7.  
  8. trap 'exit 0' PIPE
  9.  
  10. guesscompress() {
  11.     case "$1" in
  12.         *.gz)  echo "gunzip -c" ;;
  13.         *.bz2) echo "bunzip2 -c" ;;
  14.         *.Z)   echo "compress -d" ;;
  15.         *)     echo "cat" ;;
  16.     esac
  17. }
  18.  
  19. lesspipe_file() {
  20.     local out=$(file -L -- "$1")
  21.     case ${out} in
  22.         *" ar archive"*)    lesspipe "$1" ".a" ;;
  23.         *" tar archive"*)   lesspipe "$1" ".tar" ;;
  24.         *" CAB-Installer"*) lesspipe "$1" ".cab" ;;
  25.         *" troff "*)        lesspipe "$1" ".man" ;;
  26.         *" shared object"*) lesspipe "$1" ".so" ;;
  27.         *" Zip archive"*)   lesspipe "$1" ".zip" ;;
  28.         *" LHa"*archive*)   lesspipe "$1" ".lha" ;;
  29.         *" ELF "*)          readelf -a -- "$1" ;;
  30.         *": data")          hexdump -C -- "$1" ;;
  31.         *)                  return 1 ;;
  32.     esac
  33.     return 0
  34. }
  35.  
  36. lesspipe() {
  37.     local match=$2
  38.     [[ -z ${match} ]] && match=$1
  39.  
  40.     local DECOMPRESSOR=$(guesscompress "$match")
  41.  
  42.     case "$match" in
  43.  
  44.     ### Doc files ###
  45.     *.[0-9n]|*.man|\
  46.     *.[0-9n].bz2|*.man.bz2|\
  47.     *.[0-9n].gz|*.man.gz|\
  48.     *.[0-9][a-z].gz|*.[0-9][a-z].gz)
  49.         local out=$(${DECOMPRESSOR} -- "$1" | file -)
  50.         case ${out} in
  51.             *troff*)
  52.                 # Need to make sure we pass path to man or it will try 
  53.                 # to locate "$1" in the man search paths
  54.                 if [[ $1 == /* ]] ; then
  55.                     man -- "$1"
  56.                 else
  57.                     man -- "./$1"
  58.                 fi
  59.                 ;;
  60.             *text*)
  61.                 ${DECOMPRESSOR} -- "$1"
  62.                 ;;
  63.             *)
  64.                 # We could have matched a library (libc.so.6), so let
  65.                 # `file` figure out what the hell this thing is
  66.                 lesspipe_file "$1"
  67.                 ;;
  68.         esac
  69.         ;;
  70.     *.dvi)      dvi2tty "$1" ;;
  71.     *.ps|*.pdf) ps2ascii "$1" || pstotext "$1" || pdftotext "$1" ;;
  72.     *.doc)      antiword "$1" || catdoc "$1" ;;
  73.     *.rtf)      unrtf --nopict --text "$1" ;;
  74.  
  75.     ### URLs ###
  76.     ftp://*|http://*|*.htm|*.html)
  77.         for b in links2 links lynx ; do
  78.             ${b} -dump "$1" && exit 0
  79.         done
  80.         html2text -style pretty "$1"
  81.         ;;
  82.  
  83.     ### Tar files ###
  84.     *.tar)                  tar tvvf "$1" ;;
  85.     *.tar.bz2|*.tbz2|*.tbz) tar tjvvf "$1" ;;
  86.     *.tar.gz|*.tgz|*.tar.z) tar tzvvf "$1" ;;
  87.  
  88.     ### Misc archives ###
  89.     *.bz2)        bzip2 -dc -- "$1" ;;
  90.     *.gz|*.z)     gzip -dc -- "$1"  ;;
  91.     *.zip)        unzip -l "$1" ;;
  92.     *.rpm)        rpm -qpivl --changelog -- "$1" ;;
  93.     *.cpi|*.cpio) cpio -itv < "$1" ;;
  94.     *.ace)        unace l -- "$1" ;;
  95.     *.arc)        arc v "$1" ;;
  96.     *.arj)        unarj l -- "$1" ;;
  97.     *.cab)        cabextract -l -- "$1" ;;
  98.     *.lha|*.lzh)  lha v "$1" ;;
  99.     *.zoo)        zoo -list "$1" ;;
  100.     *.7z)         7z l -- "$1" ;;
  101.     *.a)          ar tv "$1" ;;
  102.     *.so)         readelf -h -d -s -- "$1" ;;
  103.  
  104.     *.rar|.r[0-9][0-9])  unrar l -- "$1" ;;
  105.  
  106.     *.deb|*.udeb)
  107.         if type -p dpkg > /dev/null ; then
  108.             dpkg --info "$1"
  109.             dpkg --contents "$1"
  110.         else
  111.             ar tv "$1"
  112.             ar p "$1" data.tar.gz | tar tzvvf -
  113.         fi
  114.         ;;
  115.  
  116.     ### Media ###
  117.     *.bmp|*.gif|*.jpeg|*.jpg|*.pcd|*.pcx|*.png|*.ppm|*.tga|*.tiff|*.tif)
  118.         identify "$1" || file -L -- "$1"
  119.         ;;
  120.     *.avi|*.mpeg|*.mpg|*.mov|*.qt|*.wmv|*.asf|*.rm|*.ram)
  121.         midentify "$1" || file -L -- "$1"
  122.         ;;
  123.     *.mp3)        mp3info "$1" || id3info "$1" ;;
  124.     *.ogg)        ogginfo "$1" ;;
  125.     *.flac)       metaflac --list "$1" ;;
  126.     *.iso)        isoinfo -d -i "$1" ; isoinfo -l -i "$1" ;;
  127.     *.bin|*.cue)  cd-info --no-header --no-device-info "$1" ;;
  128.  
  129.     ### Source code ###
  130.     *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
  131.     *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
  132.     *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
  133.     *.diff|*.patch|*.py|*.rb|*.sql)
  134.  
  135.         # Allow people to flip color off if they dont want it
  136.         case ${LESSCOLOR} in
  137.             [yY][eE][sS]|1|true) LESSCOLOR=1;;
  138.             [nN][oO]|0|false)    LESSCOLOR=0;;
  139.             *)                   LESSCOLOR=1;; # default to colorize
  140.         esac
  141.         [[ ${LESSCOLORIZER+set} != "set" ]] && LESSCOLORIZER=code2color
  142.         if [[ ${LESSCOLOR} == "0" ]] || [[ -z ${LESSCOLORIZER} ]] ; then
  143.             # let less itself handle these files
  144.             exit 0
  145.         fi
  146.  
  147.         # Only colorize if we know less will handle raw codes
  148.         for opt in ${LESS} ; do
  149.             if [[ ${opt} == "-r" || ${opt} == "-R" ]] ; then
  150.                 ${LESSCOLORIZER} "$1"
  151.                 break
  152.             fi
  153.         done
  154.         ;;
  155.  
  156. # May not be such a good idea :)
  157. #    ### Device nodes ###
  158. #    /dev/[hs]d[a-z]*)
  159. #        fdisk -l "${1:0:8}"
  160. #        [[ $1 == *hd* ]] && hdparm -I "${1:0:8}"
  161. #        ;;
  162.  
  163.     ### Everything else ###
  164.     *)
  165.         # Sanity check
  166.         [[ ${recur} == 2 ]] && exit 0
  167.  
  168.         # Maybe we didn't match due to case issues ...
  169.         if [[ ${recur} == 0 ]] ; then
  170.             recur=1
  171.             lesspipe "$1" "$(echo $1 | tr '[:upper:]' '[:lower:]')"
  172.  
  173.         # Maybe we didn't match because the file is named weird ...
  174.         else
  175.             recur=2
  176.             lesspipe_file "$1"
  177.         fi
  178.  
  179.         exit 0
  180.         ;;
  181.     esac
  182. }
  183.  
  184. if [[ -z $1 ]] ; then
  185.     echo "Usage: lesspipe.sh <file>"
  186. elif [[ $1 == "-V" ]] ; then
  187.     Id="cvsid"
  188.     cvsid="$Id: lesspipe.sh,v 1.13 2005/11/26 00:32:53 vapier Exp $"
  189.     cat <<-EOF
  190.         $cvsid
  191.         Copyright 2001-2005 Gentoo Foundation
  192.         Mike Frysinger <vapier@gentoo.org>
  193.              (with plenty of ideas stolen from other projects/distros)
  194.         
  195.         
  196.     EOF
  197.     less -V
  198. elif [[ $1 == "-h" || $1 == "--help" ]] ; then
  199.     cat <<-EOF
  200.         lesspipe.sh: preproccess files before sending them to less
  201.         
  202.         Usage: lesspipe.sh <file>
  203.         
  204.         lesspipe.sh specific settings:
  205.           LESSCOLOR env     - toggle colorizing of output
  206.           LESSCOLORIZER env - program used to colorize output (default: code2color)
  207.         
  208.         Run 'less --help' or 'man less' for more info
  209.     EOF
  210. elif [[ -d $1 ]] ; then
  211.     ls -alF -- "$1"
  212. else
  213.     recur=0
  214.     lesspipe "$1" 2> /dev/null
  215. fi
  216.